package org.lc.solon.cmd.plugin.anno;

import org.lc.solon.cmd.DataCompleter;
import org.noear.solon.core.Constants;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface CmdField {
    /**
     * 字段名
     */
    String value() default "";

    String description() default "";

    /**
     * 是否必需
     */
    boolean required() default false;

    /**
     * 参数类型
     */
    Type paramType() default Type.AUTO;

    /**
     * 默认值
     */
    String defaultValue() default Constants.PARM_UNDEFINED_VALUE;

    String[] longOpts() default {};

    char[] shortOpts() default {};

    /**
     * 内容自动补全
     */
    Class<? extends DataCompleter> completer() default DataCompleter.class;

    /**
     * 对于对象类型，读取参数时递归获取父类的字段
     */
    boolean withSuperFields() default true;

    /**
     * 参数类型
     */
    enum Type {
        /**
         * 自动识别
         * 对于必填参数，为INDEX，否则为OPTIONAL
         */
        AUTO,
        /**
         * 选项式
         */
        OPTIONAL,

        /**
         * 参数按下标取值
         */
        INDEX
    }
}
